﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.SessionState;

namespace CAP.Web
{
    /// <summary>
    /// Summary description for Handler
    /// </summary>
    public class SubmissionHandler : IHttpHandler, IRequiresSessionState
    {

        public void ProcessRequest(HttpContext context)
        {
            HttpPostedFile file = null;
            try
            {
                //throw new Exception("probando");
                file = context.Request.Files["Filedata"];
                string item = context.Request["item"];
                if (item.Equals("Pelicula")){
                    string pelicula_id = context.Request["pelicula_id"];
                    string titulo = context.Request["titulo"];
                    string genero_id = context.Request["genero_id"];
                    string usuario_id = context.Request["usuario_id"];
                    string anio = context.Request["anio"];
                    string resumen = context.Request["resumen"];
                    string origen = context.Request["origen"];
                    string duracion = context.Request["duracion"];
                    string clasificacion = context.Request["clasificacion"];
                    string imagen = null;
                    string directores = context.Request["directores"];
                    string actores = context.Request["actores"];

                    if (file != null)
                    {
                        imagen = "/imagenes/Peliculas/" + file.FileName;
                        file.SaveAs(HttpContext.Current.Server.MapPath("~/imagenes/Peliculas/") + file.FileName);
                    }

                    servicio servicio = new servicio();
                    string resultado;
                    /*
                    if(string.IsNullOrEmpty(pelicula_id))
                        resultado = servicio.InsertarPelicula(genero_id, usuario_id, titulo, anio, resumen, origen, duracion, clasificacion, imagen, directores, actores);
                    else
                        resultado = servicio.ActualizarPelicula(pelicula_id, genero_id, usuario_id, titulo, anio, resumen, origen, duracion, clasificacion, imagen, directores, actores);
                     * */
                    //En resultado podemos tener No log o No propietario en caso de no estar logueado o no ser el propietario del item si quiere actualizar. Sino tenemos el mensaje que devuelve el stored Procedure//
                    //El tema es como mostrar ese mensaje en la pagina//
                }

                if (item.Equals("Libro"))
                {
                    string libro_id = context.Request["libro_id"];
                    string titulo = context.Request["titulo"];
                    string genero_id = context.Request["genero_id"];
                    string usuario_id = context.Request["usuario_id"];
                    string anio = context.Request["anio"];
                    string resumen = context.Request["resumen"];
                    string idioma = context.Request["idioma"];
                    string isbn = context.Request["isbn"];
                    string clasificacion = context.Request["clasificacion"];
                    string imagen = null;
                    string autores = context.Request["autores"];

                    if (file != null)
                    {
                        imagen = "/imagenes/Libros/" + file.FileName;
                        file.SaveAs(HttpContext.Current.Server.MapPath("~/imagenes/Libros/") + file.FileName);
                    }
                    servicio servicio = new servicio();
                    string resultado;
                    if(string.IsNullOrEmpty(libro_id))
                        resultado = servicio.InsertarLibro(genero_id, usuario_id, titulo, autores, anio, resumen, idioma, imagen, isbn);
                    else
                        resultado = servicio.ActualizarLibro(libro_id, genero_id, usuario_id, titulo, autores, anio, resumen, idioma, imagen, isbn);
                    //En resultado podemos tener No log o No propietario en caso de no estar logueado o no ser el propietario del item si quiere actualizar. Sino tenemos el mensaje que devuelve el stored Procedure//
                    //El tema es como mostrar ese mensaje en la pagina//
                }

                if (item.Equals("Restaurant"))
                {
                    string restaurant_id = context.Request["restaurant_id"];
                    string nombre = context.Request["nombre"];
                    string categoria_id = context.Request["categoria_id"];
                    string usuario_id = context.Request["usuario_id"];
                    string localidad_id = context.Request["localidad_id"];
                    string provincia_id = context.Request["provincia_id"];
                    string resumen = context.Request["resumen"];
                    string direccion = context.Request["direccion"];
                    string telefono = context.Request["telefono"];
                    string horario = context.Request["horario"];
                    string imagen = null;

                    if (file != null)
                    {
                        imagen = "/imagenes/Restaurants/" + file.FileName;
                        file.SaveAs(HttpContext.Current.Server.MapPath("~/imagenes/Restaurants/") + file.FileName);
                    }
                    servicio servicio = new servicio();
                    string resultado;
                    if (string.IsNullOrEmpty(restaurant_id))
                        resultado = servicio.InsertarRestaurant(categoria_id, usuario_id, localidad_id, provincia_id, nombre, direccion, telefono, horario, imagen, resumen);
                    else
                        resultado = servicio.ActualizarRestaurant(restaurant_id, categoria_id, usuario_id, localidad_id, provincia_id, nombre, direccion, telefono, horario, imagen, resumen);
                    //En resultado podemos tener No log o No propietario en caso de no estar logueado o no ser el propietario del item si quiere actualizar. Sino tenemos el mensaje que devuelve el stored Procedure//
                    //El tema es como mostrar ese mensaje en la pagina//
                }

                if (item.Equals("Teatro"))
                {
                    string teatro_id = context.Request["teatro_id"];
                    string titulo = context.Request["titulo"];
                    string genero_id = context.Request["genero_id"];
                    string usuario_id = context.Request["usuario_id"];
                    string teatro = context.Request["teatro"];
                    string resumen = context.Request["resumen"];
                    string imagen = null;
                    string directores = context.Request["directores"];
                    string actores = context.Request["actores"];

                    if (file != null)
                    {
                        imagen = "/imagenes/Teatros/" + file.FileName;
                        file.SaveAs(HttpContext.Current.Server.MapPath("~/imagenes/Teatros/") + file.FileName);
                    }
                    servicio servicio = new servicio();
                    string resultado;
                    if(string.IsNullOrEmpty(teatro_id))
                        resultado = servicio.InsertarObraTeatro(genero_id, usuario_id, titulo, teatro, resumen, imagen, directores, actores);
                    else
                        resultado = servicio.ActualizarObraTeatro(teatro_id, genero_id, usuario_id, titulo, teatro, resumen, imagen, directores, actores);
                    //En resultado podemos tener No log o No propietario en caso de no estar logueado o no ser el propietario del item si quiere actualizar. Sino tenemos el mensaje que devuelve el stored Procedure//
                    //El tema es como mostrar ese mensaje en la pagina//
                }
                //return true;
            }
            catch (Exception ex)
            {
                LogErrorServices logErrorService = new LogErrorServices();
                logErrorService.InsertarLogError(ex.GetType().ToString(), ex.StackTrace, ex.Message, ex.GetBaseException().ToString(), ex.Source);
                string path = HttpContext.Current.Server.MapPath("~/Paginas/ErrorPage.aspx");
                HttpContext.Current.Response.Redirect(path);
            }
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
}